using System;
using System.Collections.Generic;
using System.Text;

using System.Data.Common;

using MakeIT.Framework.Data;
using MakeIT.SGI.ERP.Entidades;

namespace MakeIT.SGI.ERP.Negocios
{
	public partial class SgiDAOT : DAOT
	{

		public TitrechistVO getTitrechist(int? idTitRecHist, string titRecHist)
		{
			TitrechistVO titrechistVO = null;
			List<TitrechistVO> listTitrechistVOs = getTitrechists(idTitRecHist, titRecHist, null);
			if (listTitrechistVOs != null && listTitrechistVOs.Count > 0)
			{
				titrechistVO = listTitrechistVOs[0];
			}
			return titrechistVO;
		}

		public TitrechistVO getTitrechist(int? idTitRecHist)
		{
			return getTitrechist(idTitRecHist, null);
		}

		public List<TitrechistVO> getTitrechists()
		{
			return getTitrechists(null, null, null);
		}

		public List<TitrechistVO> getTitrechists(int? idTitRecHist)
		{
			return getTitrechists(idTitRecHist, null, null);
		}

		public List<TitrechistVO> getTitrechists(int? idTitRecHist, string titRecHist)
		{
			return getTitrechists(idTitRecHist, titRecHist, null);
		}

		public List<TitrechistVO> getTitrechists(int? idTitRecHist, string titRecHist, int? idTitRec)
		{
			string where = "WHERE ";
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT trh.idTitRecHist as trh_idTitRecHist, trh.idTitRec as trh_idTitRec, ttr.nrDoc as ttr_nrDoc, trh.titRecHist as trh_titRecHist, trh.titRecAcao as trh_titRecAcao, trh.cadastro as trh_cadastro, trh.cadastradoPor as trh_cadastradoPor, trh.edicao as trh_edicao, trh.editadoPor as trh_editadoPor  ");
            query.AppendLine("FROM titrechist as trh");
            query.AppendLine("  LEFT OUTER JOIN titrec as ttr on trh.idTitRec=ttr.idTitRec  ");
			if (idTitRecHist != null)
			{
				query.AppendLine(where + "trh.idTitRecHist=@idTitRecHist ");
				where = "AND ";
			}
			if (idTitRec != null)
			{
				query.AppendLine(where + "trh.idTitRec=@idTitRec ");
				where = "AND ";
			}
			if (titRecHist != null)
			{
				query.AppendLine(where + "trh.titRecHist LIKE @titRecHist ");
				where = "AND ";
			}


            query.AppendLine("ORDER BY trh.idTitRecHist DESC ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			if (idTitRecHist!= null) cmd.Parameters.Add(getParameter(cmd, "@idTitRecHist", idTitRecHist));
			if (idTitRec!= null) cmd.Parameters.Add(getParameter(cmd, "@idTitRec", idTitRec));
			if (titRecHist!= null) cmd.Parameters.Add(getParameter(cmd, "@titRecHist", "%"+titRecHist+"%"));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				List<TitrechistVO> listTitrechist = new List<TitrechistVO>();

				while (reader.Read())
				{
					TitrechistVO titrechistVO = TitrechistVO.CreateVO();
					titrechistVO.idTitRecHist = reader.GetInt32(reader.GetOrdinal("trh_idTitRecHist"));
					titrechistVO.idTitRec = reader.GetInt32(reader.GetOrdinal("trh_idTitRec"));
					if (!reader.IsDBNull(reader.GetOrdinal("ttr_nrDoc")))
						titrechistVO.idTitRecVO.nrDoc = reader.GetString(reader.GetOrdinal("ttr_nrDoc"));
					titrechistVO.titRecHist = reader.GetString(reader.GetOrdinal("trh_titRecHist"));
					titrechistVO.titRecAcao = reader.GetString(reader.GetOrdinal("trh_titRecAcao"));
					titrechistVO.cadastro = reader.GetDateTime(reader.GetOrdinal("trh_cadastro"));
					titrechistVO.cadastradoPor = reader.GetString(reader.GetOrdinal("trh_cadastradoPor"));
					titrechistVO.edicao = reader.GetDateTime(reader.GetOrdinal("trh_edicao"));
					titrechistVO.editadoPor = reader.GetString(reader.GetOrdinal("trh_editadoPor"));


					listTitrechist.Add(titrechistVO);
				}
				reader.Close();
				return listTitrechist;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
			}
		}

		public void setTitrechist(TitrechistVO titrechistVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE titrechist ");
			query.AppendLine("SET idTitRec=@idTitRec, titRecHist=@titRecHist, titRecAcao=@titRecAcao,  cadastro=@cadastro, cadastradoPor=@cadastradoPor, edicao=@edicao, editadoPor=@editadoPor ");
			query.AppendLine("WHERE idTitRecHist=@idTitRecHist ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idTitRecHist", titrechistVO.idTitRecHist));
			cmd.Parameters.Add(getParameter(cmd, "@idTitRec", titrechistVO.idTitRec));
			cmd.Parameters.Add(getParameter(cmd, "@titRecHist", titrechistVO.titRecHist));
			cmd.Parameters.Add(getParameter(cmd, "@titRecAcao", titrechistVO.titRecAcao));
			cmd.Parameters.Add(getParameter(cmd, "@cadastro", titrechistVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@cadastradoPor", titrechistVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", titrechistVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", titrechistVO.editadoPor));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}

		public long newTitrechist(TitrechistVO titrechistVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("INSERT INTO titrechist ");
			query.AppendLine("  ( idTitRec, titRecHist, titRecAcao, cadastro, cadastradoPor, edicao, editadoPor ) ");
			query.AppendLine("VALUES ( @idTitRec, @titRecHist, @titRecAcao, @cadastro, @cadastradoPor, @edicao, @editadoPor ) ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idTitRec", titrechistVO.idTitRec));
			cmd.Parameters.Add(getParameter(cmd, "@titRecHist", titrechistVO.titRecHist));
			cmd.Parameters.Add(getParameter(cmd, "@titRecAcao", titrechistVO.titRecAcao));
			cmd.Parameters.Add(getParameter(cmd, "@cadastro", titrechistVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@cadastradoPor", titrechistVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", titrechistVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", titrechistVO.editadoPor));


			try
			{
				cmd.ExecuteNonQuery();

				long newID = 0;
				if (tipo.Equals(DBType.MSSql))
				{
					cmd.CommandText = "SELECT IDENT_CURRENT('titrechist') AS 'Identity' ";
					DbDataReader reader = cmd.ExecuteReader();
					reader.Read();
					newID = (long)reader.GetDecimal(reader.GetOrdinal("Identity"));
					reader.Close();
				}
				else if (tipo.Equals(DBType.MySql))
				{
					newID = ((MySql.Data.MySqlClient.MySqlCommand)cmd).LastInsertedId;
				}
				else if (tipo.Equals(DBType.ODBC))
				{
					//TODO implementar
				}
				else if (tipo.Equals(DBType.ORACLE))
				{
					//TODO implementar
				}
				return newID;
			}
			catch (Exception ex) { throw ex; }

		}

		public void delTitrechist(TitrechistVO titrechistVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("DELETE FROM titrechist ");
            if (titrechistVO.idTitRecHist != -1) query.AppendLine("WHERE idTitRecHist=@idTitRecHist ");
            if (titrechistVO.idTitRec != -1) query.AppendLine("WHERE idTitRec=@idTitRec ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

            if (titrechistVO.idTitRecHist != -1) cmd.Parameters.Add(getParameter(cmd, "@idTitRecHist", titrechistVO.idTitRecHist));
            if (titrechistVO.idTitRec != -1) cmd.Parameters.Add(getParameter(cmd, "@idTitRec", titrechistVO.idTitRec));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}
		public int getCountTitrechistxIdTitRec(int? idTitRec)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT COUNT(idTitRec) as ocorrencias FROM titrechist WHERE IdTitRec=@IdTitRec ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@IdTitRec", idTitRec));

			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();
				reader.Read();

				int ocorrencias = 0;
				ocorrencias = reader.GetInt32(reader.GetOrdinal("ocorrencias"));
				reader.Close();
				return ocorrencias;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
			}
		}
	}
}
